package com.pet.server.ext.action.user;

import java.util.Date;

import com.pet.server.ext.ActionBase;
import com.pet.server.ext.ApiError;
import com.pet.server.ext.Logger;
import com.pet.server.ext.Result;
import com.pet.server.ext.data.VerificationCode;
import com.pet.server.ext.service.SystemService;
import com.pet.server.ext.sms.MessagePusher;
import com.pet.server.ext.util.DateUtil;
import com.pet.server.ext.util.Parameters;
import com.pet.server.ext.util.StringUtil;
import com.pet.server.ext.util.cache.PetCache;
import com.pet.server.ext.util.cache.XMemcachedUtil;


public class Verification extends ActionBase{

	public Logger logger = Logger.getLogger(Verification.class);
	public String phone_number;
	/**
  　       *移动：134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
	 *联通：130、131、132、152、155、156、185、186
	 *电信：133、153、180、189、（1349卫通）
	 */
	@Override
	public void initParameters(Parameters params) throws ApiError {
         phone_number = params.getFieldValue("phone_number");
         //if(StringUtil.isEmpty(phone_number)||!phone_number.matches("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$")){
         if(StringUtil.isEmpty(phone_number)||!phone_number.matches("^((13[0-9])|(15[^4,\\D])|(18[0-9]))\\d{8}$")){

        	 throw ApiError.Type.INVALID_PARAM.toException("不正确的手机号码!"); 
         }
         VerificationCode vcode = XMemcachedUtil.getInstance().get(PetCache.vcode_key+phone_number, VerificationCode.class);
         if(null!=vcode){
            long a =DateUtil.getSecondByTwoDate(vcode.getSend_time(), new Date());        	 
            logger.info("distance from the last transmission [%d] seconds", a);
            throw ApiError.Type.INVALID_PARAM.toException("短信发送太频繁!");
         }
	}

	@Override
	public Result invokeService() throws ApiError {
		Result result = new Result();
		SystemService systemService = new SystemService();
		Integer sendtimes = systemService.sendTimes(phone_number, new Date());
		if(sendtimes>20){
			throw ApiError.Type.LOGIC_ERROR.toException("单日发送次数达到上限!");
		}
		VerificationCode vcode = new VerificationCode();
		vcode.phone_number=phone_number;
		vcode.send_time=new Date();
		vcode.verification_code=StringUtil.createCode(4);
		systemService.saveVerification(vcode);
		MessagePusher.getInstance().sendSms(phone_number, "验证码"+vcode.verification_code+",请勿向任何人泄露，验证码提供他人将导致账户被盗,请勿转发.");
		PetCache.add(vcode);
		return result;
	}
	

}
